﻿Imports StartPoint.BR.Interfaces
Imports StartFrame.BR.Interfaces
Imports StartFrame.SystemFunctions
Imports StartFrame.SystemFunctions.Strings
Imports Common.Env
Imports System.Data.OleDb
Imports System.IO
Imports CrystalDecisions.CrystalReports.Engine

Namespace Ventas.Procesos

    Public Class InterfaseFacEleImp
        Inherits StartFrame.US.Dialogo

#Region " Código generado por el Diseñador de Windows Forms "

        Private Sub InitializeComponent()
            Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(InterfaseFacEleImp))
            Me.lblPtoVtaValor = New System.Windows.Forms.Label
            Me.lblTpCompValor = New System.Windows.Forms.Label
            Me.lblTpTransValor = New System.Windows.Forms.Label
            Me.lblPtoVta = New System.Windows.Forms.Label
            Me.lblTipoCompr = New System.Windows.Forms.Label
            Me.lblTipoTransc = New System.Windows.Forms.Label
            Me.TabPage1.SuspendLayout()
            Me.LnkTab1.SuspendLayout()
            CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit()
            CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'lblTitulo
            '
            Me.lblTitulo.Text = "Factura Electrónica: Importación"
            '
            'TabPage1
            '
            Me.TabPage1.Controls.Add(Me.lblPtoVtaValor)
            Me.TabPage1.Controls.Add(Me.lblTpCompValor)
            Me.TabPage1.Controls.Add(Me.lblTpTransValor)
            Me.TabPage1.Controls.Add(Me.lblPtoVta)
            Me.TabPage1.Controls.Add(Me.lblTipoCompr)
            Me.TabPage1.Controls.Add(Me.lblTipoTransc)
            '
            'cmdAyuda
            '
            Me.cmdAyuda.Image = CType(resources.GetObject("cmdAyuda.Image"), System.Drawing.Image)
            '
            'cmdMinimizar
            '
            Me.cmdMinimizar.Image = CType(resources.GetObject("cmdMinimizar.Image"), System.Drawing.Image)
            '
            'PictureBox2
            '
            Me.PictureBox2.BackgroundImage = CType(resources.GetObject("PictureBox2.BackgroundImage"), System.Drawing.Image)
            '
            'PictureBox1
            '
            Me.PictureBox1.BackgroundImage = CType(resources.GetObject("PictureBox1.BackgroundImage"), System.Drawing.Image)
            '
            'PictureBox3
            '
            Me.PictureBox3.BackgroundImage = CType(resources.GetObject("PictureBox3.BackgroundImage"), System.Drawing.Image)
            '
            'cmdSalir
            '
            Me.cmdSalir.Image = CType(resources.GetObject("cmdSalir.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdSalir, "Cierra el formulario (^F4)")
            '
            'cmdConfirmar
            '
            Me.cmdConfirmar.Image = CType(resources.GetObject("cmdConfirmar.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdConfirmar, "Confirma la operación (F9)")
            '
            'cmdCancelar
            '
            Me.cmdCancelar.Image = CType(resources.GetObject("cmdCancelar.Image"), System.Drawing.Image)
            Me.ToolTip.SetToolTip(Me.cmdCancelar, "Cancela la operación (ESC)")
            '
            'lblPtoVtaValor
            '
            Me.lblPtoVtaValor.AutoSize = True
            Me.lblPtoVtaValor.Location = New System.Drawing.Point(143, 102)
            Me.lblPtoVtaValor.Name = "lblPtoVtaValor"
            Me.lblPtoVtaValor.Size = New System.Drawing.Size(39, 13)
            Me.lblPtoVtaValor.TabIndex = 25
            Me.lblPtoVtaValor.Text = "Label4"
            '
            'lblTpCompValor
            '
            Me.lblTpCompValor.AutoSize = True
            Me.lblTpCompValor.Location = New System.Drawing.Point(176, 72)
            Me.lblTpCompValor.Name = "lblTpCompValor"
            Me.lblTpCompValor.Size = New System.Drawing.Size(39, 13)
            Me.lblTpCompValor.TabIndex = 24
            Me.lblTpCompValor.Text = "Label3"
            '
            'lblTpTransValor
            '
            Me.lblTpTransValor.AutoSize = True
            Me.lblTpTransValor.Location = New System.Drawing.Point(173, 43)
            Me.lblTpTransValor.Name = "lblTpTransValor"
            Me.lblTpTransValor.Size = New System.Drawing.Size(39, 13)
            Me.lblTpTransValor.TabIndex = 23
            Me.lblTpTransValor.Text = "Label2"
            '
            'lblPtoVta
            '
            Me.lblPtoVta.AutoSize = True
            Me.lblPtoVta.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblPtoVta.Location = New System.Drawing.Point(39, 102)
            Me.lblPtoVta.Name = "lblPtoVta"
            Me.lblPtoVta.Size = New System.Drawing.Size(98, 13)
            Me.lblPtoVta.TabIndex = 22
            Me.lblPtoVta.Text = "Punto de venta:"
            '
            'lblTipoCompr
            '
            Me.lblTipoCompr.AutoSize = True
            Me.lblTipoCompr.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblTipoCompr.Location = New System.Drawing.Point(39, 72)
            Me.lblTipoCompr.Name = "lblTipoCompr"
            Me.lblTipoCompr.Size = New System.Drawing.Size(131, 13)
            Me.lblTipoCompr.TabIndex = 21
            Me.lblTipoCompr.Text = "Tipo de comprobante:"
            '
            'lblTipoTransc
            '
            Me.lblTipoTransc.AutoSize = True
            Me.lblTipoTransc.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
            Me.lblTipoTransc.Location = New System.Drawing.Point(39, 43)
            Me.lblTipoTransc.Name = "lblTipoTransc"
            Me.lblTipoTransc.Size = New System.Drawing.Size(128, 13)
            Me.lblTipoTransc.TabIndex = 20
            Me.lblTipoTransc.Text = "Tipo de Transacción:"
            '
            'InterfaseFacEleImp
            '
            Me.BackgroundImage = CType(resources.GetObject("$this.BackgroundImage"), System.Drawing.Image)
            Me.ClientSize = New System.Drawing.Size(524, 403)
            Me.Name = "InterfaseFacEleImp"
            Me.TabPage1.ResumeLayout(False)
            Me.TabPage1.PerformLayout()
            Me.LnkTab1.ResumeLayout(False)
            CType(Me.PictureBox2, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit()
            CType(Me.PictureBox3, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)

        End Sub

#End Region

#Region " Constructor "

        Public Sub New()
            MyBase.New()

            'El Diseñador de Windows Forms requiere esta llamada.
            InitializeComponent()

            'Agregar cualquier inicialización después de la llamada a InitializeComponent()

        End Sub

#End Region

#Region " Declaraciones "

#Region " General "

        Private _Transaccion As String      'Transacción por defecto
        Private _Circuito As String         'Circuito por defecto

        Private _Param As IParametro
        Private _ParamTransac As IParametrosTransaccion
        Private _TipoImportacion As String          'Tipo de exportacion a afip (ME, TDF)

        Private _PathA As String             'Ruta de aprobados a importar
        Private _PathR As String             'Ruta de rechazados a importar

        Private iCompA As Integer            'Contador de comprobantes aprobados procesados
        Private iCompR As Integer            'Contador de comprobantes rechazados procesados


        'Objetos de BR que se utilizarán
        Private Sql As ISql

        Private par_remele As Boolean
        Private par_remele_version As String

        Private _NPrimerTransacGen As Long  'Número de la primer transacción generada
        Private _NUltTransacGen As Long     'Número de la ultima transacción generada
        Private _FePrimerTransacGen As Date  'Número de la primer transacción generada
        Private _FeUltTransacGen As Date 'Número de la ultima transacción generada

        'Otros formularios
        Private frmSelectPtoVta As New StartPoint.US.Utilitarios.SelectPtoVta
        Friend WithEvents lblPtoVtaValor As System.Windows.Forms.Label
        Friend WithEvents lblTpCompValor As System.Windows.Forms.Label
        Friend WithEvents lblTpTransValor As System.Windows.Forms.Label
        Friend WithEvents lblPtoVta As System.Windows.Forms.Label
        Friend WithEvents lblTipoCompr As System.Windows.Forms.Label
        Friend WithEvents lblTipoTransc As System.Windows.Forms.Label
        Private frmSelectTransac As New StartPoint.US.Utilitarios.SelectTransac("VENTAS")

#End Region

#End Region

#Region "Eventos"

        Private Sub InterfaseFEImp_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load


            'Solicita se especifique la transacción
            Me._Circuito = ""
            Me._Transaccion = ""

            'Otros objetos de negocios
            Sql = CType(RemotingHelper.getObject(GetType(ISql)), ISql)
            _Param = CType(RemotingHelper.getObject(GetType(IParametro)), IParametro)
            _ParamTransac = CType(RemotingHelper.getObject(GetType(IParametrosTransaccion)), IParametrosTransaccion)

            InicializaFormTransaccion()

            'Punto de Venta
            If Me._Transaccion <> "" Then
                Me.InicializaFormPtoVta()
            End If

            lblTpTransValor.Text = _Circuito
            lblTpCompValor.Text = _Transaccion
            lblPtoVtaValor.Text = Common.Env.PuntoVenta

            _TipoImportacion = _Param.getParametro("EXPAFIP_" + _Circuito.Trim()).Trim()

            'Setea los parametros del path
            _PathA = _Param.getParametro("DIRIMP_FEA")
            _PathR = _Param.getParametro("DIRIMP_FER")

            Select Case _TipoImportacion
                Case "ML"
                    _PathA = _PathA.Trim + "\ML"
                    _PathR = _PathR.Trim + "\ML"
                Case Else
                    _PathA = _PathA.Trim + "\ME"
                    _PathR = _PathR.Trim + "\ME"

            End Select






        End Sub

        Public Overrides Sub cmdConfirmar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConfirmar.Click

            Dim sMensaje As String

            'Cartel de espera
            Dim mensaje As New StartFrame.US.ShowMsg(StartFrame.US.ShowMsg.Tipos.MensajeSimple, "Realizando importación de Factura Electrónica..")
            mensaje.Grafico = StartFrame.US.ShowMsg.Graficos.Grabar
            mensaje.Show()
            mensaje.Refresh()

            Try


                'Procesar aprobados
                ImportacionA()

                'Procesar rechazados
                ImportacionR()

                sMensaje = "Proceso realizado: " + Chr(13) + "Comprobantes aprobados: " + Str(iCompA) + Chr(13) + "Comprobantes rechazados: " + Str(iCompR)


                'Si los dos terminaron bien
                StartFrame.US.Display.MsgBox(sMensaje, "Importar", StartFrame.US.Display.MsgBoxTipos.msgInformacion)

            Catch ex As Exception
                StartFrame.US.Display.MsgBox("El proceso de importacion se cancelo por un error inesperado.", "Importación", StartFrame.US.Display.MsgBoxTipos.msgError)
            Finally
                'Actualiza el mensaje
                mensaje.Close()
            End Try

        End Sub

#End Region

#Region "Metodos"

        'Solicita el ingreso de una transacción de ventas
        Private Sub InicializaFormTransaccion()
            Try

                'Llama al formulario para seleccionar una transacción
                If frmSelectTransac.ShowDialog = DialogResult.OK Then

                    If frmSelectTransac.Transaccion = "" Then
                        'Si no seleccionó alguna transacción, informa al operador
                        StartFrame.US.Display.MsgBox("Antes de poder registrar una operación de ventas deberá ingresar la " & _
                                                    "transacción en el sistema de Utilitarios", "Transacción", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                        Me._Circuito = ""
                        Me._Transaccion = ""
                        'Me.LnkTab1.Enabled = False
                        Throw New Exception("No seleccionó ninguna transacción.")

                    Else
                        'Guarda el código de la transacción relacionada en una propiedad
                        Me._Circuito = frmSelectTransac.Circuito
                        Me._Transaccion = frmSelectTransac.Transaccion
                    End If

                    par_remele_version = CType(_ParamTransac.GetParametro(Me._Transaccion.ToString, "GEN_REMELE_VERSION"), String)
                    par_remele = CType(_ParamTransac.GetParametro(Me._Transaccion, "GEN_REMELE"), Boolean)


                Else
                    'Si no seleccionó alguna transacción, informa al operador
                    StartFrame.US.Display.MsgBox("Antes de poder registrar una operación de ventas deberá ingresar la " & _
                                                "transacción en el sistema de Utilitarios", "Transacción", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                    Me._Circuito = ""
                    Me._Transaccion = ""
                    'Me.LnkTab1.Enabled = False
                    Throw New Exception("No seleccionó ninguna transacción.")

                End If
            Catch ex As Exception
                StartFrame.US.Display.MsgBox("El programa de importacion no fue correctamente cargado.", "Importación", StartFrame.US.Display.MsgBoxTipos.msgError)

            End Try

        End Sub

        Private Sub InicializaFormPtoVta()
            Try

                'Llama al formulario para seleccionar un Punto de Venta
                'y setear Common.Env.PuntoVenta
                If frmSelectPtoVta.ShowDialog = DialogResult.OK Then
                    If frmSelectPtoVta.PtoVta <> "" Then
                        Common.Env.PuntoVenta = frmSelectPtoVta.PtoVta
                    End If
                End If

                'Comprueba la selección
                If Common.Env.PuntoVenta = 0 Then
                    Throw New Exception("Debe seleccionar un punto de venta antes de poder emitir una transacción.")
                End If
            Catch ex As Exception

            End Try

        End Sub


#End Region

#Region "Funciones"
        'Importacion de aprobados
        Private Function ImportacionA() As Boolean

            Dim sCampos, sCondicion, svalores, sOrigen As String
            Dim dsClientes As DataSet
            Dim iUpdate As Integer
            Dim dsDataFacturas As DataSet
            Dim xFile As System.IO.FileInfo
            Dim sFilename As String
            Dim nuTransaccion As Integer = 0, feTransaccion As Date, cdProvincia As String
            Dim arrNumTransac() As Long
            Dim arrFecTransac() As Date


            Dim _PathAH As String = _PathA + "\HISTORICOS"

            'Objeto de conexion a SQL
            Dim DBConnection1 As New OleDbConnection(ConnectionString)

            'Objeto de transacciones SQL
            Dim Trans As OleDbTransaction

            'Contador de comprobantes procesados
            Me.iCompA = 0
            ReDim Preserve arrNumTransac(iCompA)
            ReDim Preserve arrFecTransac(iCompA)

            Try
                'Abro la conexion
                DBConnection1.Open()

                'Inicio de transaccion
                Trans = DBConnection1.BeginTransaction()
            Catch ex As Exception
                StartFrame.US.Display.MsgBox("Error al abrir la conexión a la base de datos.", "Importación", StartFrame.US.Display.MsgBoxTipos.msgError)
                Return False
            End Try


            Try

                'Si no existe el directorio cancela el subproceso
                If Not System.IO.Directory.Exists(_PathA) Then
                    StartFrame.US.Display.MsgBox("No existe el directorio de importacion: " + _PathA.ToString, "Importación", StartFrame.US.Display.MsgBoxTipos.msgError)
                    Return False
                End If

                'Objetos de importacion
                Dim Sr1 As IO.StreamReader
                Dim vLine As String
                Dim aArchivos As Array = Nothing
                Dim aCampos As Array = Nothing
                Dim vProcesoOK As Boolean

                'Chequeo de archivos existentes 

                'Obtengo los nombres de los archivos
                'Si no existe nada para importar avisa.
                If IO.Directory.GetFiles(_PathA).Length = 0 Then
                    StartFrame.US.Display.MsgBox("No existe nada para importar en: " + _PathA.ToString, "Importación", StartFrame.US.Display.MsgBoxTipos.msgInformacion)
                    Return False
                End If

                aArchivos = IO.Directory.GetFiles(_PathA)

                'Recorro la cantidad de archivos
                For Each item As String In aArchivos
                    vProcesoOK = False
                    'Carga el archivo al streamreader
                    Sr1 = System.IO.File.OpenText(item)

                    'TODO: AF
                    'Obtener el nombre del archivo y con eso identificar el tipo de comprobantes si es FC o NC/ND
                    ' y validarlo. El nombre se obtiene con:
                    'System.IO.Path.GetFileName(item)
                    ' Otra forma de obtenerlo es con el campo (1) que indica el tipo de comprobante: 19 = FC
                    '

                    vLine = Sr1.ReadLine()

                    'inicializa los numeros de transaccion para imprimir masivo y ordenado por numero de copia

                    sCondicion = "cd_transaccion = 'DUMMY'" 'Asigna la variable con nada por las dudas para no actualizar cosas por error.

                    Do While Not vLine Is Nothing 'Recorre las lineas del archivo

                        'Carga el array con los campos ya divididos
                        aCampos = vLine.Split("|")

                        'Si los tipos de registro son tipo de cabecera o pie me interesan de lo contrario no.
                        'ademas es importante que encuentre un "PI" despues que un "CR"

                        'Primero verifica si puede seguir verificando que se trate del punto de venta que quiero procesar.
                        If Convert.ToInt32(aCampos(3)).ToString <> Common.Env.PuntoVenta.ToString Then
                            Exit Do
                        End If

                        'Buscar el comprobante en la base de datos y cambiarle el estado

                        ' Busca el codigo de cliente a traves del cuit
                        'select * from vad_clientes where nu_cuit = 33540863119
                        ' 
                        sCampos = "cd_cliente, nu_cuit, nu_documento"
                        sOrigen = "vad_clientes"
                        Dim sValor As String = aCampos(0).ToString.Trim

                        If aCampos(0).ToString.Length = 13 Then
                            sCondicion = "nu_cuit = '" + Replace(sValor, "-", "") + "' or nu_documento ='" + Replace(sValor.Substring(0, 9), "-", "").Substring(0, 8) + "'"
                        Else
                            sCondicion = "nu_cuit = '" + sValor + "' or nu_documento ='" + sValor.Substring(0, 9) + "'"
                        End If

                        dsClientes = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                        'sigue siempre y cuando exista el cliente
                        If dsClientes.Tables(0).Rows.Count <> 0 Then

                            'Setea variables que utiliza luego en las busquedas.
                            sCampos = "cd_estado_trans"
                            svalores = "'EMITIDA'"
                            sOrigen = "vcd_facturas"

                            sCondicion = "cd_transaccion = '" + _Transaccion + "'" 'Codigo de transaccion
                            sCondicion += " and nu_ptovta = " + Str(Common.Env.PuntoVenta) 'Punto de venta
                            sCondicion += " and nu_pri_comprobante = " + aCampos(4) 'numero de comprobante
                            sCondicion += " and tp_factura = '" + aCampos(2) + "'" 'Tipo de factura
                            sCondicion += " and cd_circuito = '" + Me._Circuito.Trim + "'" ' Circuito
                            'sCondicion += " and cd_cliente = '" + dsClientes.Tables(0).Rows(0)(0) + "'" 'Cliente

                            'Grabar a la base de datos la modiciacion de estos campos
                            iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)




                            'Actualizacion de tabla vld_atrib_facturas
                            'Si no se encontro el comprobante sigue con el proximo.
                            If iUpdate <> 0 Then

                                'Obtener el numero de transaccion de la factura en proceso(nu_transaccion)
                                sCampos = "nu_transaccion, fe_transaccion, cd_provincia, cd_cliente, cd_sucursal, tp_domicilio_rel "
                                dsDataFacturas = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)
                                nuTransaccion = dsDataFacturas.Tables(0).Rows(0)(0)
                                feTransaccion = dsDataFacturas.Tables(0).Rows(0)(1)
                                'cdProvincia = dsDataFacturas.Tables(0).Rows(0)(2)



                                'Actualizacion de Fecha CAE
                                sCampos = "va_parametro"

                                svalores = StartFrame.SystemFunctions.Dates.DateToSql(DateTime.ParseExact(aCampos(7), "yyyyMMdd", New Globalization.CultureInfo("es-AR"))) 'Fecha CAE
                                'svalores = aCampos(7).ToString.Substring(6, 2) + "/" + aCampos(7).ToString.Substring(4, 2) + "/" + aCampos(7).ToString.Substring(0, 4)

                                'DateTime.ParseExact(s, "yyyyMMdd", null)

                                sOrigen = "vld_atrib_facturas"

                                sCondicion = "cd_parametro = 'CAE_FECHA'"
                                sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                                sCondicion += " and nu_transaccion = " + nuTransaccion.ToString() 'numero de comprobante

                                iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                                'Actualizacion de Valor CAE
                                svalores = "'" + aCampos(5).ToString + "'" ' CAE

                                sCondicion = "cd_parametro = 'CAE'"
                                sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                                sCondicion += " and nu_transaccion = " + nuTransaccion.ToString() 'numero de comprobante

                                iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                                'Genera los datos de impresion de CAE
                                Dim paramArrayList As New ArrayList
                                Dim paramArrayListRet As ArrayList

                                paramArrayList.Add("") 'cd_barras
                                paramArrayList.Add("") 'nu_cai
                                paramArrayList.Add("") 'fe_cai
                                paramArrayList.Add("") 'cd_afip
                                paramArrayList.Add("") 'cd_id_formulario
                                paramArrayList.Add("") 'cd_lectura_humana

                                paramArrayList.Add(_Transaccion)
                                paramArrayList.Add(nuTransaccion)
                                paramArrayList.Add(feTransaccion)

                                paramArrayListRet = Sql.ExecSPOV(ConnectionString, "vp_get_cd_barras_cai", paramArrayList)

                                'Guarda los datos de CAE de impresion
                                'Actualizacion de Valor BARRAS
                                svalores = "'" + paramArrayListRet(0).ToString + "'"

                                sCondicion = "cd_parametro = 'CD_BARRAS'"
                                sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                                sCondicion += " and nu_transaccion = " + nuTransaccion.ToString() 'numero de comprobante

                                iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                                'Actualizacion de Valor CD_BARRAS_LECTURA
                                svalores = "'" + paramArrayListRet(5).ToString + "'"

                                sCondicion = "cd_parametro = 'CD_BARRAS_LECTURA'"
                                sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                                sCondicion += " and nu_transaccion = " + nuTransaccion.ToString() 'numero de comprobante

                                iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)


                                'este array permite ir guardando los numeros de transaccion generados.
                                'Lo necesita para poder imprimir en forma masiva luego.
                                ReDim Preserve arrNumTransac(iCompA)
                                ReDim Preserve arrFecTransac(iCompA)

                                arrNumTransac(iCompA) = nuTransaccion
                                arrFecTransac(iCompA) = feTransaccion

                                iCompA += 1

                                'El remito electronico se genera si: 
                                '                1) la transaccion lo soporta
                                '                2) Lo requiere la provincia
                                '                3) No es factura electonica (en ese caso se genera despues)

                                sCampos = "cd_provincia"
                                sOrigen = "vld_dom_clientes"

                                sCondicion = "cd_cliente = " & SystemFunctions.Strings.StringToSql(Trim(dsDataFacturas.Tables("vcd_facturas").Rows(0)("cd_cliente"))) & _
                                " AND cd_sucursal = " & SystemFunctions.Strings.StringToSql(Trim(dsDataFacturas.Tables("vcd_facturas").Rows(0)("cd_sucursal"))) & _
                                " AND tp_domicilio = " & SystemFunctions.Strings.StringToSql(Trim(dsDataFacturas.Tables("vcd_facturas").Rows(0)("tp_domicilio_rel")))
                                Dim ds1 As DataSet
                                ds1 = Me.Sql.Select(Common.Env.ConnectionString, sCampos, sOrigen, sCondicion)
                                cdProvincia = Trim(ds1.Tables(0).Rows(0)("cd_provincia"))

                                If par_remele And cdProvincia.ToString.Trim = _Param.getParametro("PROVLOCAL").Trim() Then
                                    Me.GenRemEle(Me._Transaccion, nuTransaccion)
                                End If


                                vProcesoOK = True
                            Else
                                Dim vMsg As String
                                vMsg = "No se encuentran datos en el sistema para: " + Chr(13)
                                vMsg += "Comprobante: " + aCampos(2).ToString.Trim + "-" + aCampos(3).ToString.Trim + "-" + aCampos(4).ToString.Trim + Chr(13)
                                vMsg += "Cliente: " + dsClientes.Tables(0).Rows(0)(0).ToString + Chr(13)
                                vMsg += "Circuito : " + Me._Circuito.Trim
                                StartFrame.US.Display.MsgBox(vMsg, "Importar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                            End If

                        End If

                        'Carga la linea
                        vLine = Sr1.ReadLine()

                    Loop

                    Sr1.Close()

                    ''TODO: Imprime . Arreglar para que acepte un rango de transacciones.
                    ''Ordena el array
                    'Array.Sort(arrNumTransac)
                    'Array.Sort(arrFecTransac)
                    'Me._NPrimerTransacGen = arrNumTransac(0)
                    'Me._NUltTransacGen = arrNumTransac(arrNumTransac.Length - 1)

                    'Me._FePrimerTransacGen = arrFecTransac(0)
                    'Me._FeUltTransacGen = arrFecTransac(arrFecTransac.Length - 1)

                    'Me.Imprimir(Me._Transaccion, Me._NPrimerTransacGen, Me._NUltTransacGen, Me._FePrimerTransacGen, Me._FeUltTransacGen, aCampos(2))


                    'Mover los archivos al subdirectorio Historicos solo si se proceso el archivo
                    If vProcesoOK Then
                        'Dim xFile As New System.IO.FileInfo(item)
                        xFile = New FileInfo(item)

                        'Si no existe crea el directorio
                        If Not System.IO.Directory.Exists(_PathAH) Then
                            Try
                                ' Try to create the directory.
                                Dim DI1 As System.IO.DirectoryInfo = System.IO.Directory.CreateDirectory(_PathAH)
                            Catch ex As Exception
                                'Mensaje de error 
                                StartFrame.US.Display.MsgBox("Error al crear el directorio de Historicos.", "Importar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                                Continue For
                            End Try
                        End If

                        Try
                            sFilename = item.Substring(_PathA.Length)

                            xFile.MoveTo(_PathAH + sFilename)

                            'Vacia el objeto para volver a usarlo en la proxima vuelta
                            xFile = Nothing

                        Catch ex As Exception
                            'Mensaje de error 
                            StartFrame.US.Display.MsgBox("No pudo moverse el archivo: " + System.IO.Path.GetFileName(item) + ".", "Importar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                            Continue For
                        End Try
                    End If

                Next

                Trans.Commit()

                'HACE LA IMPRESION DE LOS COMPROBANTES  PROCESADOS -------------------------------------------------------------------
                'TODO: Imprime . Arreglar para que acepte un rango de transacciones.
                'Ordena el array
                Array.Sort(arrNumTransac)
                Array.Sort(arrFecTransac)
                Me._NPrimerTransacGen = arrNumTransac(0)
                Me._NUltTransacGen = arrNumTransac(arrNumTransac.Length - 1)

                Me._FePrimerTransacGen = arrFecTransac(0)
                Me._FeUltTransacGen = arrFecTransac(arrFecTransac.Length - 1)

                Me.Imprimir(Me._Transaccion, Me._NPrimerTransacGen, Me._NUltTransacGen, Me._FePrimerTransacGen, Me._FeUltTransacGen, aCampos(2))


                'Cierro la conexion
                DBConnection1.Close()

                'Importacion de aprobados exitosa
                Return True

            Catch ex As Exception

                Trans.Rollback()

                'Cierro la conexion
                DBConnection1.Close()

                Return False

            End Try

        End Function

        'Importacion de rechazar
        Private Function ImportacionR() As Boolean

            Dim sCampos, sCondicion, svalores, sOrigen As String
            Dim iUpdate As Integer
            Dim dsDataFacturas As DataSet

            Dim xFile As System.IO.FileInfo
            Dim sFilename As String

            Dim _PathRH As String = _PathR + "\HISTORICOS"

            'Objeto de conexion a SQL
            Dim DBConnection1 As New OleDbConnection(ConnectionString)

            'Objeto de transacciones SQL
            Dim Trans As OleDbTransaction

            'Contador de comprobantes procesados
            Me.iCompR = 0

            Try
                'Abro la conexion
                DBConnection1.Open()

                'Inicio de transaccion
                Trans = DBConnection1.BeginTransaction()
            Catch ex As Exception
                StartFrame.US.Display.MsgBox("Error al abrir la conexión a la base de datos.", "Importación", StartFrame.US.Display.MsgBoxTipos.msgError)
                Return False
            End Try


            Try

                'Si no existe el directorio cancela el subproceso
                If Not System.IO.Directory.Exists(_PathR) Then
                    Return False
                End If

                'Objetos de importacion
                Dim Sr1 As IO.StreamReader
                Dim vLine As String
                Dim aArchivos, aCampos As Array

                'Chequeo de archivos existentes 

                'Obtengo los nombres de los archivos
                aArchivos = IO.Directory.GetFiles(_PathR)

                'Recorro la cantidad de archivos
                For Each item As String In aArchivos

                    'Carga el archivo al streamreader
                    Sr1 = System.IO.File.OpenText(item)

                    vLine = Sr1.ReadLine()

                    Do While Not vLine Is Nothing 'Recorre las lineas del archivo

                        'Carga el array con los campos ya divididos
                        aCampos = vLine.Split("|")

                        'Buscar el comprobante en la base de datos y cambiarle el estado
                        sCampos = "cd_estado_trans"

                        svalores = "'RECHAZADA'"

                        sOrigen = "vcd_facturas"

                        'CONFIRMAR ESTOS CAMPOS PORQUE NO SON LA CLAVE PRIMARIA
                        sCondicion = "cd_transaccion = '" + _Transaccion 'Codigo de transaccion
                        sCondicion += "' and nu_ptovta = " + Str(Common.Env.PuntoVenta) 'Punto de venta
                        sCondicion += " and nu_pri_comprobante = " + aCampos(3) 'numero de comprobante
                        sCondicion += " and tp_factura = '" + aCampos(1) + "'" 'Tipo de factura

                        'Grabar a la base de datos la modiciacion de estos campos
                        iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                        'Actualizacion de tabla vld_atrib_facturas

                        'Si no se encontro el comprobante sigue con el proximo.
                        If iUpdate <> 0 Then

                            'Obtener el numero de transaccion de la factura en proceso(nu_transaccion)
                            sCampos = "nu_transaccion"

                            dsDataFacturas = Sql.Select(ConnectionString, sCampos, sOrigen, sCondicion)

                            'Actualizacion de Fecha CAE
                            sCampos = "va_parametro"

                            svalores = StartFrame.SystemFunctions.Dates.DateToSql(DateTime.ParseExact(aCampos(5), "yyyyMMdd", New Globalization.CultureInfo("es-AR"))) 'Fecha CAE

                            'DateTime.ParseExact(s, "yyyyMMdd", null)

                            sOrigen = "vld_atrib_facturas"

                            sCondicion = "cd_parametro = 'CAE_FECHA'"
                            sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                            sCondicion += " and nu_transaccion = " + dsDataFacturas.Tables(0).Rows(0)(0).ToString() 'numero de comprobante

                            iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                            'Actualizacion de Valor CAE
                            svalores = aCampos(4) 'CAE

                            sCondicion = "cd_parametro = 'CAE'"
                            sCondicion += " and cd_transaccion = '" + _Transaccion + "'"
                            sCondicion += " and nu_transaccion = " + dsDataFacturas.Tables(0).Rows(0)(0).ToString() 'numero de comprobante

                            iUpdate = Sql.Update(ConnectionString, sOrigen, sCampos, svalores, "", sCondicion)

                            iCompR += 1

                        End If

                        'Carga la linea
                        vLine = Sr1.ReadLine()

                    Loop

                    Sr1.Close()

                    'Mover los archivos al subdirectorio Historicos

                    'Dim xFile As New System.IO.FileInfo(item)
                    xFile = New FileInfo(item)

                    'Si no existe crea el directorio
                    If Not System.IO.Directory.Exists(_PathRH) Then
                        Try
                            ' Try to create the directory.
                            Dim DI1 As System.IO.DirectoryInfo = System.IO.Directory.CreateDirectory(_PathRH)
                        Catch ex As Exception
                            'Mensaje de error 
                            StartFrame.US.Display.MsgBox("Error al crear el directorio de Historicos.", "Importar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                            Continue For
                        End Try
                    End If

                    Try
                        sFilename = item.Substring(_PathA.Length)

                        xFile.MoveTo(_PathRH + sFilename)

                        'Vacia el objeto para volver a usarlo en la proxima vuelta
                        xFile = Nothing

                    Catch ex As Exception
                        'Mensaje de error 
                        StartFrame.US.Display.MsgBox("Error al Mover el archivo " + item + ".", "Importar", StartFrame.US.Display.MsgBoxTipos.msgAlerta)
                        Continue For
                    End Try
                Next

                Trans.Commit()

                'Cierro la conexion
                DBConnection1.Close()

                'Importacion de aprobados exitosa
                Return True

            Catch ex As Exception

                Trans.Rollback()

                'Cierro la conexion
                DBConnection1.Close()

                Return False

            End Try

        End Function

#End Region

#Region "Procesos"
        'Impresion de los comprobantes (cuando corresponda)
        Private Sub Imprimir(ByVal cd_transaccion As String, ByVal nu_pri_transaccion As Integer, ByVal nu_ult_transaccion As Integer, ByVal fe_pri_transaccion As Date, ByVal fe_ult_transaccion As Date, ByVal tp_factura As String)
            Dim err As Boolean = False
            Dim imprime As Byte
            Dim TipoImpresion As String = ""
            Dim TiposFacturas As New ArrayList
            Dim Impresora As String = ""
            Dim bPrevisualiza As Boolean = False

            'Verifica si se puede imprimir la transacción
            '0 = Puede imprimir
            '1 = No puede imprimir porque ya imprimió y es impresora fiscal
            '2 = No puede imprimir porque no tiene autorización

            imprime = 0

            Dim msg As New StartFrame.US.ShowMsg(StartFrame.US.ShowMsg.Tipos.MensajeSimple, "Imprimiendo la transacción...")

            Try
                'Busca el reporte y cant. de copias a imprimir
                Dim Reporte As String = ""
                Dim Copias As Integer
                Dim CopiasAux As String = ""

                Dim NumeroCAI As String = ""
                Dim FechaCAI As String = ""
                Dim CodigoAFIP As String = ""
                Dim CodigoIDFormulario As String = ""

                'Busca el reporte asociado a la transacción, al punto de venta y tipo de factura
                ObtenerDatosReporte(tp_factura.ToString, Reporte, CopiasAux, NumeroCAI, FechaCAI, CodigoAFIP, CodigoIDFormulario, TipoImpresion, Impresora)


                If Not (Reporte Is Nothing) Then 'AndAlso Copias > 0 Then
                    'Barra de progreso
                    Me.Cursor = Cursors.WaitCursor
                    msg.Grafico = StartFrame.US.ShowMsg.Graficos.Imprimir
                    msg.Show()
                    msg.Refresh()

                    'JMT - Campos agregados para ir al form
                    'Si hay más de 1 reporte
                    Dim aReportes As String() = {""}
                    If Reporte.IndexOf(",") <> -1 Then
                        aReportes = Reporte.Split(",", 10, StringSplitOptions.None)
                    Else
                        aReportes(0) = Reporte
                    End If
                    'Copias
                    Dim aCopias As String() = {""}
                    If CopiasAux.IndexOf(",") <> -1 Then
                        aCopias = CopiasAux.Split(",", 10, StringSplitOptions.None)
                        If aCopias.Length <> aReportes.Length Then
                            CopiasAux = aCopias(0)
                            ReDim aCopias(0)
                            aCopias(0) = CopiasAux
                        End If
                    Else
                        aCopias(0) = CopiasAux
                    End If
                    'nu_cai
                    Dim aNumeroCAI As String() = {""}
                    If NumeroCAI.IndexOf(",") <> -1 Then
                        aNumeroCAI = NumeroCAI.Split(",", 10, StringSplitOptions.None)
                        If aNumeroCAI.Length <> aReportes.Length Then
                            NumeroCAI = aNumeroCAI(0)
                            ReDim aNumeroCAI(0)
                            aNumeroCAI(0) = NumeroCAI
                        End If
                    Else
                        aNumeroCAI(0) = NumeroCAI
                    End If
                    'fe_cai
                    Dim aFechaCAI As String() = {""}
                    If FechaCAI.IndexOf(",") <> -1 Then
                        aFechaCAI = FechaCAI.Split(",", 10, StringSplitOptions.None)
                        If aFechaCAI.Length <> aReportes.Length Then
                            FechaCAI = aFechaCAI(0)
                            ReDim aFechaCAI(0)
                            aFechaCAI(0) = FechaCAI
                        End If
                    Else
                        aFechaCAI(0) = FechaCAI
                    End If
                    'cd_afip
                    Dim aCodigoAFIP As String() = {""}
                    If CodigoAFIP.IndexOf(",") <> -1 Then
                        aCodigoAFIP = CodigoAFIP.Split(",", 10, StringSplitOptions.None)
                        If aCodigoAFIP.Length <> aReportes.Length Then
                            CodigoAFIP = aCodigoAFIP(0)
                            ReDim aCodigoAFIP(0)
                            aCodigoAFIP(0) = CodigoAFIP
                        End If
                    Else
                        aCodigoAFIP(0) = CodigoAFIP
                    End If
                    'cd_id_formulario
                    Dim aCodigoIDFormulario As String() = {""}
                    If CodigoIDFormulario.IndexOf(",") <> -1 Then
                        aCodigoIDFormulario = CodigoIDFormulario.Split(",", 10, StringSplitOptions.None)
                        If aCodigoIDFormulario.Length <> aReportes.Length Then
                            CodigoIDFormulario = aCodigoIDFormulario(0)
                            ReDim aCodigoIDFormulario(0)
                            aCodigoIDFormulario(0) = CodigoIDFormulario
                        End If
                    Else
                        aCodigoIDFormulario(0) = CodigoIDFormulario
                    End If

                    For Each Reporte In aReportes
                        If aCopias.Length = 1 Then
                            Copias = CInt(CopiasAux)
                        Else
                            Copias = CInt(aCopias(Array.IndexOf(aReportes, Reporte)))
                        End If

                        If aNumeroCAI.Length = 1 Then
                            NumeroCAI = aNumeroCAI(0)
                        Else
                            NumeroCAI = aNumeroCAI(Array.IndexOf(aReportes, Reporte))
                        End If

                        If aFechaCAI.Length = 1 Then
                            FechaCAI = aFechaCAI(0)
                        Else
                            FechaCAI = aFechaCAI(Array.IndexOf(aReportes, Reporte))
                        End If

                        If aCodigoAFIP.Length = 1 Then
                            CodigoAFIP = aCodigoAFIP(0)
                        Else
                            CodigoAFIP = aCodigoAFIP(Array.IndexOf(aReportes, Reporte))
                        End If

                        If aCodigoIDFormulario.Length = 1 Then
                            CodigoIDFormulario = aCodigoIDFormulario(0)
                        Else
                            CodigoIDFormulario = aCodigoIDFormulario(Array.IndexOf(aReportes, Reporte))
                        End If

                        If Copias > 0 Then
                            If TipoImpresion = "P" Then
                                Copias = 1
                            End If

                            'JMT:Corte por copia
                            'For copia = 1 To Copias

                            Reporte = Reporte.Trim
                            'Carga los rangos para el SP
                            Dim arrayRangos As New ArrayList

                            arrayRangos.Add(cd_transaccion)
                            arrayRangos.Add(cd_transaccion)
                            arrayRangos.Add(nu_pri_transaccion)
                            arrayRangos.Add(nu_ult_transaccion)
                            arrayRangos.Add(fe_pri_transaccion.ToShortDateString())
                            arrayRangos.Add(fe_ult_transaccion.ToShortDateString())
                            arrayRangos.Add("")
                            arrayRangos.Add("ZZZZZZZZ")
                            arrayRangos.Add("")
                            arrayRangos.Add("ZZZZZZZZ")
                            arrayRangos.Add("")
                            arrayRangos.Add("ZZZZZZZZ")
                            arrayRangos.Add(PuntoVenta)
                            arrayRangos.Add(Me._Circuito)
                            arrayRangos.Add(tp_factura.ToString)

                            Dim dsReporte As DataSet = Sql.ExecSPDS(ConnectionString, LCase(Reporte), arrayRangos, 120)

                            'Crea un XML para diseño del reporte
                            dsReporte.WriteXml("_" & Reporte & ".xml")

                            'Obtiene el reporte
                            'traigo el nombre de la assemblie
                            Dim assemblie As String = _Param.getParametro("REPORTE_VENTAS")
                            If assemblie = String.Empty Then
                                assemblie = "US.spmc.ventas.reportes"
                            End If

                            Dim targetAssembly As System.Reflection.Assembly = System.Reflection.Assembly.Load(assemblie)
                            Dim otype As Type = targetAssembly.GetType(Reporte)

                            If IsNothing(otype) Then
                                'Reporte inexistente
                                Throw New Exception("Reporte: [" & Reporte & "], no encontrado")
                            Else
                                'Instancia el reporte
                                Dim o As Object = Activator.CreateInstance(otype, True)
                                Dim rpt As ReportClass = CType(o, ReportClass)

                                'Instancia la ventana de presentación preliminar
                                Dim rptVistaPrevia As New StartFrame.US.VistaPrevia

                                'Determina la impresora por defecto
                                Dim printDocument As System.Drawing.Printing.PrintDocument = New System.Drawing.Printing.PrintDocument

                                If TipoImpresion = "I" Then
                                    If Impresora <> "" Then
                                        If Impresora = "?" Then
                                            'Selecciona impresora
                                            Dim dlgPrinter As New System.Windows.Forms.PrintDialog
                                            dlgPrinter.AllowPrintToFile = False
                                            dlgPrinter.AllowSelection = False
                                            dlgPrinter.AllowSomePages = False
                                            dlgPrinter.PrintToFile = False
                                            dlgPrinter.ShowNetwork = True
                                            dlgPrinter.Document = printDocument
                                            If dlgPrinter.ShowDialog(Me) = DialogResult.OK Then
                                                rpt.PrintOptions.PrinterName = dlgPrinter.PrinterSettings.PrinterName
                                            Else
                                                'Impresión cancelada
                                                Exit Sub
                                            End If
                                        Else
                                            'Impresora por nombre (por ej.: \\ope01\qlaser4050)
                                            rpt.PrintOptions.PrinterName = Impresora
                                            'rpt.PrintOptions.PaperSize = CrystalDecisions.[Shared].PaperSize.PaperA4
                                        End If
                                    Else
                                        'impresora por defecto
                                        rpt.PrintOptions.PrinterName = printDocument.PrinterSettings.PrinterName
                                        'rpt.PrintOptions.PaperSize = CrystalDecisions.[Shared].PaperSize.PaperA4
                                    End If
                                Else
                                    rptVistaPrevia.MdiParent = Me.ParentForm
                                    rptVistaPrevia.WindowState = FormWindowState.Maximized
                                End If

                                'Enlaza el reporte con el set de datos
                                rpt.SetDataSource(dsReporte)

                                'Agrega los campos calculados
                                Dim crFormulas As FormulaFieldDefinitions
                                crFormulas = rpt.DataDefinition.FormulaFields

                                crFormulas.Item("RangosDetalle").Text = Chr(34) & "" & Chr(34)
                                crFormulas.Item("Operador").Text = Chr(34) & Common.Env.Operador & Chr(34)
                                crFormulas.Item("Empresa").Text = Chr(34) & Common.Env.Empresa & Chr(34)

                                Try
                                    'Obtiene el parametro 
                                    Dim PtoVtaAlternativo As String = ""
                                    PtoVtaAlternativo = _Param.getParametro("REMITO_FE" + PuntoVenta.ToString.Trim).Trim()
                                    crFormulas.Item("NumeroCAI").Text = Chr(34) & NumeroCAI.Trim & Chr(34)
                                    crFormulas.Item("FechaCAI").Text = Chr(34) & FechaCAI.Trim & Chr(34)
                                    crFormulas.Item("CodigoAFIP").Text = Chr(34) & CodigoAFIP.Trim & Chr(34)
                                    crFormulas.Item("CodigoIDFormulario").Text = Chr(34) & CodigoIDFormulario.Trim & Chr(34)
                                    crFormulas.Item("PtoVtaAlternativo").Text = Chr(34) & PtoVtaAlternativo & Chr(34)
                                Catch ex As Exception
                                    'El reporte no tiene esta fórmula
                                End Try

                                If TipoImpresion = "I" Then
                                    Dim NumCopia As Integer
                                    'Número de copia para ver si es original, duplicado, etc.
                                    For NumCopia = 1 To Copias
                                        Try
                                            crFormulas.Item("NumeroCopia").Text = Chr(34) & NumCopia.ToString.Trim & Chr(34)
                                        Catch ex As Exception
                                            'El reporte no tiene esta fórmula
                                        End Try
                                        'rpt.PrintToPrinter(Copias, True, 1, 999)
                                        rpt.PrintToPrinter(1, True, 1, 999)
                                    Next
                                Else
                                    'Vista preliminar
                                    Try
                                        crFormulas.Item("NumeroCopia").Text = Chr(34) & "1" & Chr(34)
                                    Catch ex As Exception
                                        'El reporte no tiene esta fórmula
                                    End Try

                                    rptVistaPrevia.VisorReportes.ReportSource = rpt
                                    rptVistaPrevia.Show()
                                End If

                            End If
                            'Next
                        End If


                        'End If

                    Next

                    Me.Cursor = Cursors.Default


                End If

            Catch ex As Exception
                'Error al obtener datos del reporte
                err = True
            Finally
                Me.Cursor = Cursors.Default
                msg.Close()
                msg.Dispose()
            End Try
        End Sub

        'Obtiene datos de los reportes
        Private Sub ObtenerDatosReporte(ByVal TipoFactura As String, ByRef Reporte As String, ByRef Copias As String, _
                                ByRef NumeroCAI As String, ByRef FechaCAI As String, ByRef CodigoAFIP As String, _
                                ByRef CodigoIDFormulario As String, ByRef TipoImpresion As String, ByRef Impresora As String)

            Try
                Reporte = CType(Sql.Search(ConnectionString, "nm_reporte", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
                Copias = CType(Sql.Search(ConnectionString, "ca_copias", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
                TipoImpresion = CType(Sql.Search(ConnectionString, "tp_impresion", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
                If TipoImpresion = "I" Then
                    Try
                        Impresora = CType(Sql.Search(ConnectionString, "nm_impresora", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
                    Catch ex As Exception
                        Impresora = ""
                    End Try
                End If
            Catch ex As Exception
                'Al no tener cargado el nombre del reporte no imprimira nada
            End Try
            Try
                NumeroCAI = CType(Sql.Search(ConnectionString, "nu_cai", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
            Catch ex As Exception
                NumeroCAI = ""
            End Try
            Try
                FechaCAI = CType(Sql.Search(ConnectionString, "fe_cai", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
            Catch ex As Exception
                FechaCAI = ""
            End Try
            Try
                CodigoAFIP = CType(Sql.Search(ConnectionString, "cd_afip", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
            Catch ex As Exception
                CodigoAFIP = ""
            End Try
            Try
                CodigoIDFormulario = CType(Sql.Search(ConnectionString, "cd_id_formulario", "vld_talonarios_pv", "cd_transaccion = '" & Me._Transaccion & "' and nu_ptovta = '" & Common.Env.PuntoVenta & "' and tp_factura = '" & TipoFactura & "'"), String)
            Catch ex As Exception
                CodigoIDFormulario = ""
            End Try

        End Sub

        'Genera los remitos electronicos (Exporta remitos a TXT)
        Private Sub GenRemEle(ByVal cd_transaccion As String, ByVal nu_transaccion As Integer)
            'Private Sub GenRemEle(ByVal paramDataset1 As DataSet)

            'checkeo de generacion 
            Dim vGenerar As Boolean = False
            Dim Row1 As DataRow
            Dim conStock, sinStock As Integer


            Dim parDataSet, parDataSetLin As DataSet
            Dim campos, origen, cond As String 'variables para armar las consultas

            campos = "TOP 1 *"
            origen = "vcd_facturas"
            cond = "cd_transaccion= '" & Me._Transaccion & "' and nu_transaccion = " & nu_transaccion.ToString
            parDataSet = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

            campos = "*"
            origen = "vld_facturas"
            cond = "cd_transaccion= '" & Me._Transaccion & "' and nu_transaccion = " & nu_transaccion.ToString
            parDataSetLin = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)


            'Verifica que tenga algo para exportar
            'Para que no genere un archivo vacio
            campos = "count(*) conStock "
            origen = "vld_facturas"
            cond = "cd_transaccion= '" & Me._Transaccion & "' and nu_transaccion = " & nu_transaccion.ToString & " and st_sin_stock = 0"
            conStock = CType(Me.Sql.Search(ConnectionString, campos, origen, cond), String).TrimEnd

            cond = "cd_transaccion= '" & Me._Transaccion & "' and nu_transaccion = " & nu_transaccion.ToString & " and st_sin_stock = 1"
            sinStock = CType(Me.Sql.Search(ConnectionString, campos, origen, cond), String).TrimEnd

            'If conStock > sinStock Then
            'af 6/6/11 CAMBIA la pregunta porque tiene que exportar si tiene algo para exportar
            If conStock > 0 Then
                vGenerar = True
            Else
                vGenerar = False
            End If



            If vGenerar Then
                Dim xPath As String = "C:\E-Rm\"
                Dim xFile As String
                Dim Sw1 As IO.StreamWriter = Nothing
                Dim Ds1, Ds2, Ds3, Ds4, Ds6, Ds7 As DataSet

                Dim mArchivos As Array

                Dim vContador As Integer = 1
                Dim vLine As String = Nothing
                Dim vAuxFecha2 As String = Nothing
                Dim vCampovacio As String = Nothing
                Dim vCuitCliente As String = Nothing
                Dim vRazonSocial As String = Nothing
                Dim vDomicilio As String = Nothing
                Dim vLocalidad As String = Nothing
                Dim vCodnum As String = Nothing
                Dim vCodPostal As String = Nothing

                Dim vAuxFecha1 As Date

                'Si no existe crea el directorio
                If Not System.IO.Directory.Exists(xPath) Then
                    Try
                        ' Try to create the directory.
                        Dim DI1 As System.IO.DirectoryInfo = System.IO.Directory.CreateDirectory(xPath)
                    Catch ex As Exception
                        MsgBox("Error al crear el directorio")
                    End Try
                End If

                'Obtiene el punto de venta para el remito
                Dim PtoVtaAlternativo As String = ""
                PtoVtaAlternativo = _Param.getParametro("REMITO_FE" + PuntoVenta.ToString.Trim).Trim()
                If PtoVtaAlternativo = "" Then
                    PtoVtaAlternativo = PuntoVenta.ToString.Trim

                End If

                'Carga de Dataset necesarios
                campos = "TOP 1 *"
                origen = "vad_clientes"
                cond = "cd_cliente=" & SystemFunctions.Strings.StringToSql(parDataSet.Tables(0).Rows(0)("cd_cliente"))
                Ds1 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                origen = "vld_dom_clientes"
                cond = cond + "AND cd_sucursal=" & SystemFunctions.Strings.StringToSql(Convert.ToString(parDataSet.Tables(0).Rows(0)("cd_sucursal")).Trim) + _
                "AND tp_domicilio=" & SystemFunctions.Strings.StringToSql(Convert.ToString(parDataSet.Tables(0).Rows(0)("tp_domicilio_rel")).Trim)
                Ds2 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                campos = "TOP 1 *"
                origen = "wad_provincias"
                cond = "cd_provincia=" & SystemFunctions.Strings.StringToSql(_Param.getParametro("PROVLOCAL")).Trim()
                Ds6 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                campos = "TOP 1 *"
                origen = "vad_transportistas"
                cond = "cd_transportista=" & SystemFunctions.Strings.StringToSql(parDataSet.Tables(0).Rows(0)("cd_transportista"))
                Ds7 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                'Chequeo de archivos existentes 

                'Obtengo los nombres de los archivos
                mArchivos = IO.Directory.GetFiles(xPath)

                ' Chequea si existe un archivo con la numeracion actual del contador
                For I As Integer = 0 To mArchivos.Length() - 1
                    'Obtengo la fecha del archivo
                    vAuxFecha1 = IO.File.GetCreationTime(mArchivos(I))

                    If vAuxFecha1.Date() = System.DateTime.Today() Then
                        vCodnum = Convert.ToString(mArchivos(I)).Substring(xPath.Length + 31, 6)
                        If vCodnum = (vContador).ToString().PadLeft(6, "0") Then
                            vContador += 1
                            I = -1
                        End If
                    End If
                Next

                'Paso la fecha de entrega al formato que se necesita en String
                vAuxFecha1 = parDataSet.Tables("vcd_facturas").Rows(0)("fe_entrega")
                vAuxFecha2 = vAuxFecha1.Year.ToString() + vAuxFecha1.Month.ToString().PadLeft(2, "0") + vAuxFecha1.Day.ToString().PadLeft(2, "0")

                xFile = xPath + "TB_" + Trim(_Param.getParametro("FORM_CUIT")) + "_001001_" + vAuxFecha2 + _
                "_" + (vContador).ToString().PadLeft(6, "0") + ".TXT"

                Try
                    Sw1 = New IO.StreamWriter(xFile)
                Catch ex As Exception
                    MsgBox("Error al crear el archivo")
                End Try

                'Prepara variables a usar en el armado de los registros.
                vCampovacio = "| "
                vCuitCliente = Convert.ToString(Ds1.Tables(0).Rows(0)("nu_cuit"))
                vRazonSocial = Ds1.Tables(0).Rows(0)("nm_cliente")
                If Ds2.Tables(0).Rows.Count > 0 Then
                    vDomicilio = Ds2.Tables(0).Rows(0)("nm_calle") + " " + Convert.ToString(Ds2.Tables(0).Rows(0)("nu_casa")) + _
                    " " + Ds2.Tables(0).Rows(0)("nu_piso") + " " + Ds2.Tables(0).Rows(0)("nu_dpto")

                    vLocalidad = Ds2.Tables(0).Rows(0)("nm_localidad")
                    vCodPostal = Ds2.Tables(0).Rows(0)("cd_postal")
                End If

                'Agrega información al archivo en disco
                ' Genera distintos archivos dependiendo de la version.
                'XXX: AF: Se hace variable la generacion del remito electronico.
                '     para eso se agrega este select case.
                Select Case par_remele_version
                    Case "20110919"
                        'Tipo de Registro 1 (Cabecera de Archivo)
                        vLine = "01" + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        Sw1.WriteLine(vLine)

                        'Tipo de Registro 2 (Cabecera de Remito)
                        vLine = "02" + "|" + vAuxFecha2
                        vLine = vLine + "|" + "91 R" + Convert.ToString(PtoVtaAlternativo).PadLeft(4, "0")
                        vLine = vLine + Convert.ToString(parDataSet.Tables("vcd_facturas").Rows(0)("nu_pri_comprobante")).PadLeft(8, "0")
                        vLine = vLine + "|" + vAuxFecha2
                        vLine = vLine + vCampovacio
                        vLine = vLine + "|" + "E|0"
                        vLine = vLine + vCampovacio + vCampovacio
                        vLine = vLine + "|" + vCuitCliente
                        vLine = vLine + "|" + vRazonSocial.PadRight(50, " ")
                        'XXX: nuevo campo TENEDOR
                        vLine = vLine + "|" + "0"
                        If vDomicilio.Length > 40 Then
                            vLine = vLine + "|" + vDomicilio.Substring(0, 40)
                        Else
                            vLine = vLine + "|" + vDomicilio.PadRight(40, " ")
                        End If
                        vLine = vLine + vCampovacio + "|" + "S/N" + vCampovacio + vCampovacio + vCampovacio
                        'XXX: nuevo campo CODIGO POSTAL
                        vLine = vLine + "|" + vCodPostal.PadRight(8, " ")
                        vLine = vLine + "|" + vLocalidad.PadRight(30, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim() + vCampovacio + "|" + "NO"
                        vLine = vLine + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        vLine = vLine + "|" + _Param.getParametro("FORM_EMP").PadRight(50, " ")
                        'XXX: nuevo campo EMISOR TENEDOR
                        vLine = vLine + "|" + "0"
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_DIR").PadRight(40, " ")
                        vLine = vLine + vCampovacio + "|" + _Param.getParametro("RE_PL1_NUM").Trim
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio
                        'XXX: nuevo campo Codigo Postal de palnta
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_CP").PadRight(8, " ")
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_LOC").PadRight(50, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim()
                        'XXX: cuit del transportista
                        vLine = vLine + "|" + Convert.ToString(Ds7.Tables(0).Rows(0)("nu_cuit")).PadRight(11, " ")
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio

                        'XXX: nuevo campo Productos no terminados
                        vLine = vLine + "|" + "0"

                        'XXX: nuevo campo importe
                        Dim nImporte As String
                        nImporte = Math.Round(parDataSet.Tables("vcd_facturas").Rows(0)("im_total"), 2).ToString

                        'le saca puntos y comas
                        nImporte = nImporte.ToString.Replace(".", "").Replace(",", "").Trim
                        nImporte = "0000000000" + nImporte
                        nImporte = nImporte.Substring(nImporte.Length - 10, 10)
                        vLine = vLine + "|" + nImporte.ToString.Trim

                        'XXX: fin nuevo campo importe

                        Sw1.WriteLine(vLine)
                        'Tipo de Registro 3 (Detalle de Remito)
                        For Each Row1 In parDataSetLin.Tables(0).Rows
                            If Not Row1("st_sin_stock") Then
                                campos = "TOP 1 *"
                                origen = "tad_articulos"
                                cond = "cd_articulo=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_articulo"))
                                Ds3 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                campos = "TOP 1 *"
                                origen = "tad_unidades_medida"
                                cond = "cd_unidad_medida=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_unidad_medida"))
                                Ds4 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                vLine = "03"
                                vLine = vLine + "|" + Convert.ToString(Ds3.Tables(0).Rows(0)("cd_afip")).Trim()
                                vLine = vLine + "|" + Convert.ToString(Ds4.Tables(0).Rows(0)("cd_afip")).Trim()
                                ' vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()
                                vLine = vLine + "|" + Row1("ca_unidades").ToString.Replace(".", "").Replace(",", "").Trim
                                vLine = vLine + "|" + Row1("cd_articulo")
                                'XXX: nuevo campo DESCRIPCION
                                vLine = vLine + "|" + Convert.ToString(Row1("nm_articulo")).PadRight(40, " ")
                                vLine = vLine + "|" + Trim(Ds4.Tables(0).Rows(0)("cd_unidad_medida"))
                                'vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()
                                vLine = vLine + "|" + Row1("ca_unidades").ToString.Replace(".", "").Replace(",", "").Trim

                                Sw1.WriteLine(vLine)
                            End If
                        Next

                        'Tipo de Registro 4 (Cierre de archivo)
                        vLine = "04|1" '' el 1 es la cantidad de Remitos emitidos (por archivo)

                        Sw1.WriteLine(vLine)
                    Case "20080204"
                        'Tipo de Registro 1 (Cabecera de Archivo)
                        vLine = "01" + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        Sw1.WriteLine(vLine)

                        'Tipo de Registro 2 (Cabecera de Remito)
                        vLine = "02" + "|" + vAuxFecha2
                        vLine = vLine + "|" + "91 R" + Convert.ToString(PtoVtaAlternativo).PadLeft(4, "0")
                        vLine = vLine + Convert.ToString(parDataSet.Tables("vcd_facturas").Rows(0)("nu_pri_comprobante")).PadLeft(8, "0")
                        vLine = vLine + "|" + vAuxFecha2
                        vLine = vLine + vCampovacio
                        vLine = vLine + "|" + "E|0"
                        vLine = vLine + vCampovacio + vCampovacio
                        vLine = vLine + "|" + vCuitCliente
                        vLine = vLine + "|" + vRazonSocial.PadRight(50, " ")
                        'XXX: nuevo campo TENEDOR
                        vLine = vLine + "|" + "0"
                        If vDomicilio.Length > 40 Then
                            vLine = vLine + "|" + vDomicilio.Substring(0, 40)
                        Else
                            vLine = vLine + "|" + vDomicilio.PadRight(40, " ")
                        End If
                        vLine = vLine + vCampovacio + "|" + "S/N" + vCampovacio + vCampovacio + vCampovacio
                        'XXX: nuevo campo CODIGO POSTAL
                        vLine = vLine + "|" + vCodPostal.PadRight(8, " ")
                        vLine = vLine + "|" + vLocalidad.PadRight(30, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim() + vCampovacio + "|" + "NO"
                        vLine = vLine + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        vLine = vLine + "|" + _Param.getParametro("FORM_EMP").PadRight(50, " ")
                        'XXX: nuevo campo EMISOR TENEDOR
                        vLine = vLine + "|" + "0"
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_DIR").PadRight(40, " ")
                        vLine = vLine + vCampovacio + "|" + _Param.getParametro("RE_PL1_NUM").Trim
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio
                        'XXX: nuevo campo Codigo Postal de palnta
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_CP").PadRight(8, " ")
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_LOC").PadRight(50, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim()
                        'XXX: cuit del transportista
                        vLine = vLine + "|" + Convert.ToString(Ds7.Tables(0).Rows(0)("nu_cuit")).PadRight(11, " ")
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio

                        'XXX: nuevo campo importe
                        Dim nImporte As String
                        nImporte = Math.Round(parDataSet.Tables("vcd_facturas").Rows(0)("im_total"), 2).ToString

                        'le saca puntos y comas
                        nImporte = nImporte.ToString.Replace(".", "").Replace(",", "").Trim
                        nImporte = "0000000000" + nImporte
                        nImporte = nImporte.Substring(nImporte.Length - 10, 10)
                        vLine = vLine + "|" + nImporte.ToString.Trim

                        'XXX: fin nuevo campo importe

                        Sw1.WriteLine(vLine)
                        'Tipo de Registro 3 (Detalle de Remito)
                        For Each Row1 In parDataSetLin.Tables(0).Rows
                            If Not Row1("st_sin_stock") Then
                                campos = "TOP 1 *"
                                origen = "tad_articulos"
                                cond = "cd_articulo=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_articulo"))
                                Ds3 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                campos = "TOP 1 *"
                                origen = "tad_unidades_medida"
                                cond = "cd_unidad_medida=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_unidad_medida"))
                                Ds4 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                vLine = "03"
                                vLine = vLine + "|" + Convert.ToString(Ds3.Tables(0).Rows(0)("cd_afip")).Trim()
                                vLine = vLine + "|" + Convert.ToString(Ds4.Tables(0).Rows(0)("cd_afip")).Trim()
                                ' vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()
                                vLine = vLine + "|" + Row1("ca_unidades").ToString.Replace(".", "").Replace(",", "").Trim
                                vLine = vLine + "|" + Row1("cd_articulo")
                                'XXX: nuevo campo DESCRIPCION
                                vLine = vLine + "|" + Convert.ToString(Row1("nm_articulo")).PadRight(40, " ")
                                vLine = vLine + "|" + Trim(Ds4.Tables(0).Rows(0)("cd_unidad_medida"))
                                'vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()
                                vLine = vLine + "|" + Row1("ca_unidades").ToString.Replace(".", "").Replace(",", "").Trim

                                Sw1.WriteLine(vLine)
                            End If
                        Next

                        'Tipo de Registro 4 (Cierre de archivo)
                        vLine = "04|1" '' el 1 es la cantidad de Remitos emitidos (por archivo)

                        Sw1.WriteLine(vLine)


                    Case Else ' Hace lo que hizo siempre (version original)
                        'Tipo de Registro 1 (Cabecera de Archivo)
                        vLine = "01" + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        Sw1.WriteLine(vLine)

                        'Tipo de Registro 2 (Cabecera de Remito)
                        vLine = "02" + "|" + vAuxFecha2
                        vLine = vLine + "|" + "91 R" + Convert.ToString(parDataSet.Tables("vcd_facturas").Rows(0)("nu_ptovta")).PadLeft(4, "0")
                        vLine = vLine + Convert.ToString(parDataSet.Tables("vcd_facturas").Rows(0)("nu_pri_comprobante")).PadLeft(8, "0")
                        vLine = vLine + "|" + vAuxFecha2
                        vLine = vLine + vCampovacio
                        vLine = vLine + "|" + "E|0"
                        vLine = vLine + vCampovacio + vCampovacio
                        vLine = vLine + "|" + vCuitCliente
                        vLine = vLine + "|" + vRazonSocial.PadRight(50, " ")
                        If vDomicilio.Length > 40 Then
                            vLine = vLine + "|" + vDomicilio.Substring(0, 40)
                        Else
                            vLine = vLine + "|" + vDomicilio.PadRight(40, " ")
                        End If
                        vLine = vLine + vCampovacio + "|" + "S/N" + vCampovacio + vCampovacio + vCampovacio + vCampovacio
                        vLine = vLine + "|" + vLocalidad.PadRight(30, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim() + vCampovacio + "|" + "NO"
                        vLine = vLine + "|" + Trim(_Param.getParametro("FORM_CUIT"))
                        vLine = vLine + "|" + _Param.getParametro("FORM_EMP").PadRight(50, " ")
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_DIR").PadRight(40, " ")
                        vLine = vLine + vCampovacio + "|" + _Param.getParametro("RE_PL1_NUM").Trim
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio + vCampovacio
                        vLine = vLine + "|" + _Param.getParametro("RE_PL1_LOC").PadRight(50, " ")
                        vLine = vLine + "|" + Convert.ToString(Ds6.Tables(0).Rows(0)("cd_afip")).Trim()
                        vLine = vLine + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio + vCampovacio

                        Sw1.WriteLine(vLine)
                        'Tipo de Registro 3 (Detalle de Remito)
                        For Each Row1 In parDataSetLin.Tables(0).Rows
                            If Not Row1("st_sin_stock") Then
                                campos = "TOP 1 *"
                                origen = "tad_articulos"
                                cond = "cd_articulo=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_articulo"))
                                Ds3 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                campos = "TOP 1 *"
                                origen = "tad_unidades_medida"
                                cond = "cd_unidad_medida=" & SystemFunctions.Strings.StringToSql(parDataSetLin.Tables(0).Rows(0)("cd_unidad_medida"))
                                Ds4 = Me.Sql.Select(Common.Env.ConnectionString, campos, origen, cond)

                                vLine = "03"
                                vLine = vLine + "|" + Convert.ToString(Ds3.Tables(0).Rows(0)("cd_afip")).Trim()
                                vLine = vLine + "|" + Convert.ToString(Ds4.Tables(0).Rows(0)("cd_afip")).Trim()
                                vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()
                                vLine = vLine + "|" + Row1("cd_articulo") + vCampovacio
                                vLine = vLine + "|" + Trim(Ds4.Tables(0).Rows(0)("cd_unidad_medida"))
                                vLine = vLine + "|" + Convert.ToString(Row1("ca_unidades")).PadRight(Convert.ToString(Row1("ca_unidades")).Length + 2, "0").Trim()

                                Sw1.WriteLine(vLine)
                            End If
                        Next

                        'Tipo de Registro 4 (Cierre de archivo)
                        vLine = "04|1" '' el 1 es la cantidad de Remitos emitidos (por archivo)

                        Sw1.WriteLine(vLine)

                End Select

                Sw1.Close()
            End If
        End Sub


#End Region

    End Class

End Namespace
